// 按位运算符 & | ^ ~ << >>

// &: 在二进制中表示为如果对应的位都是 1，则为1。否则（有一个位不为1）为 0
/*
  二进制：
  0000 0001 （1）
  0000 0011 （3）
  ——————
  0000 0001 （1）
*/
// 1
console.log(1 & 3);


// |: 在二进制中表示为对应的任意位为1，则为1。否则（所有位都为0）为 0
/*
  二进制：
  0000 0001 （1）
  0000 0011 （3）
  ——————
  0000 0011 （3）
*/
// 3
console.log(1 | 3);

// ^: 如果两个操作位都为 1 的话，结果为 0。
/*
  二进制：
  0000 0001 （1）
  0000 0011 （3）
  ——————
  0000 0010 （2）
*/
// 2
console.log(1 ^ 3);

// ~ 表示对位求反。1 变 0, 0 变 1。十进制计算结果是取反减1。
// -4, 3求反之后为-3-1=-4
console.log(~3);

// << 向左移动
/*
  二进制：
  0000 0011 （3）
  ——————
  0000 0110 （6）
*/
// 6
console.log(3 << 1);

// >> 表示向右移动。
/*
  0000 0011 （3）
  ——————
  0000 0001 （1）
*/
// 1
console.log(3 >> 1);
